; assume cs:codesg
; datasg segment
;     db 'ibm             '
;     db 'dec             '
;     db 'dos             '
;     db 'vax             '
; datasg ends


; codesg segment
;     start:

;     ; 外层循环
;     mov cx,4
;     mov bx,0
;     s1:

;     push bx

;     ; 内层循环
;     mov cx,3
;     mov si,0
    
;     s2:
;     mov ax,datasg
;     mov ds,ax
;     pop bx

;     ; 转换成大写
;     mov bl,ds:[bx+si]
;     add bl,11011111b
;     mov ds:[bx+si],bl
    
;     add si,1
;     loop s2
;     add bx,16
;     loop s1


;     mov ax,4c00h
;     int 21h        
; codesg ends
; end start

assume cs:codesg

datasg segment
    db 'ibm             '
    db 'dec             '
    db 'dos             '
    db 'vax             '
datasg ends

stacksg segment
    dw 0,0,0,0,0,0,0,0
stacksg ends

codesg segment
            ; 栈
    start:  mov ax,stacksg
            mov ss,ax
            mov sp,16
            ; 数据段
            mov ax,datasg
            mov ds,ax
            ; 第一个循环条件（）
            mov bx,0
            mov cx,4
            ; 循环体一
            s0: 
                ; 第二个循环条件（）
                push cx ;-------------
                mov si,0
                mov cx,3
                ; 循环体二
            s:  mov al,[bx+si]
                and al,11011111b
                mov [bx+si],al
                inc si
                
                loop s
                
                add bx,10H
                pop cx; 出循环体--------------
                loop s0
            
            mov ax,4c00H
            int 21H 
            
codesg ends
end start